package com.molichuxing.gateway.bff.order.services;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.framework.service.RootService;
import com.molichuxing.gateway.bff.order.entity.request.create.EnterpriseLeaseConfirmCreateVo;
import com.molichuxing.gateway.bff.order.entity.request.create.EnterprisePayCreateVo;
import com.molichuxing.gateway.bff.order.entity.request.create.OrderEnterpriseCreateVo;
import com.molichuxing.gateway.bff.order.entity.response.*;

import java.util.List;
import java.util.Map;

/**
 * 企业订单bff
 *
 * @Author zoumingyu
 * @Date 2020年06月03日
 */
public interface OrderEnterpriseBffService extends RootService {

    /**
     * 获取企业订单基本信息
     *
     * @param orderCode 订单号
     * @return OrderEnterpriseBaseVo
     */
    OrderEnterpriseBaseVo getEnterpriseBase(Long orderCode);

    /**
     * 获取企业订单车辆明细
     *
     * @param orderCode 订单号
     * @return OrderEnterpriseCarDetailVo
     */
    OrderEnterpriseCarDetailVo getEnterpriseCar(Long orderCode);

    /**
     * 获取企业订单交车信息
     *
     * @param orderCode 订单号
     * @return List
     */
    List<OrderEnterpriseCarHandoverVo> getEnterpriseCarDelivery(Long orderCode);

    /**
     * 获取企业订单还款信息
     *
     * @param orderCode 订单号
     * @return OrderEnterpriseRepaymentDetailVo
     */
    OrderEnterpriseRepaymentDetailVo getEnterpriseRepayment(Long orderCode);

    /**
     * 新增企业订单
     *
     * @param createVo 新增信息
     * @return boolean
     */
    boolean create(OrderEnterpriseCreateVo createVo) throws Exception;

    /**
     * 订单支付/还款
     *
     * @param createVo 付款信息
     * @return boolean
     */
    boolean createPay(EnterprisePayCreateVo createVo);

    /**
     * 验证企业订单还款
     *
     * @param orderCode  订单号
     * @param scheduleId 排期id
     * @return
     */
    EnterpriseScheduleVerifyVo getVerifyRepay(Long orderCode, Integer scheduleId);

    /**
     * 查询订单和车辆信息
     *
     * @param orderCode 订单号
     * @return EnterpriseVo
     */
    EnterpriseAndCarVo getEnterprise(Long orderCode);

    /**
     * 订单列表
     *
     */
    Paged<OrderEnterpriseListVo> orderEnterpriseList(Map<String, Object> params, Integer pageNum, Integer pageSize);

    /**
     * 租赁车辆列表
     *
     * @return
     */
    Paged<OrderEnterpriseCarBizVo> orderEnterpriseCarList(Map<String, Object> params, Integer pageNum, Integer pageSize);

    /**
     * 起租确认
     * @param createVo
     * @return
     */
    Boolean leaseConfirm(EnterpriseLeaseConfirmCreateVo createVo);

    /**
     * 获取订单状态流
     *
     * @param orderCode
     * @return
     */
    List<OrderTradeFlowVo> getEnterpriseStateFlow(Long orderCode) throws Exception;

    /**
     * 根据车辆ID获取企业订单列表信息
     * @param carId
     * @return
     */
    List<OrderEnterpriseListVo> getListByCarId(Integer carId);

    /**
     * 根据订单号获取车型车辆列表
     * @param orderCode
     * @return
     */
    List<OrderEnterpriseModelCarVo> getOrderEnterpriseModelCar(Long orderCode);
}
